[ASAN] sysroot: Fix leak/double free of keyfile origin
authorColin Walters <walters@verbum.org>
Tue, 29 Nov 2016 03:00:01 +0000 (22:00 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 30 Nov 2016 18:51:26 +0000 (18:51 +0000)
Use autoptr rather than manual cleanup.  The double free isn't a
security problem, since we trust origin files.

Closes: #598
Approved by: jlebon

src/libostree/ostree-deployment.c
src/libostree/ostree-sysroot.c

index 7b93e6cc886d5d25f1375e6d426de31ac7ba27b4..67e896bfd66edb8baaeab457c94bc377253c7626 100644 (file)
@@ -133,7 +133,6 @@ OstreeDeployment *
 ostree_deployment_clone (OstreeDeployment *self)
 {
   glnx_unref_object OstreeBootconfigParser *new_bootconfig = NULL;
-  GKeyFile *new_origin = NULL;
   OstreeDeployment *ret = ostree_deployment_new (self->index, self->osname, self->csum,
                                                  self->deployserial,
                                                  self->bootcsum, self->bootserial);
@@ -143,6 +142,7 @@ ostree_deployment_clone (OstreeDeployment *self)
 
   if (self->origin)
     {
+      g_autoptr(GKeyFile) new_origin = NULL;
       g_autofree char *data = NULL;
       gsize len;
       gboolean success;
index 608d4cff18b78e4896f9d359e38626c47babeb2d..70ce15670f9918b775595320b740ffa8cc002420 100644 (file)
@@ -613,8 +613,6 @@ parse_origin (OstreeSysroot   *self,
  out:
   if (error)
     g_prefix_error (error, "Parsing %s: ", origin_path);
-  if (ret_origin)
-    g_key_file_unref (ret_origin);
   return ret;
 }
 
@@ -689,7 +687,7 @@ parse_deployment (OstreeSysroot       *self,
   glnx_fd_close int deployment_dfd = -1;
   const char *deploy_basename;
   g_autofree char *treebootserial_target = NULL;
-  GKeyFile *origin = NULL;
+  g_autoptr(GKeyFile) origin = NULL;
   g_autofree char *unlocked_development_path = NULL;
   struct stat stbuf;
 
@@ -751,8 +749,6 @@ parse_deployment (OstreeSysroot       *self,
   if (out_deployment)
     *out_deployment = g_steal_pointer (&ret_deployment);
  out:
-  if (origin)
-    g_key_file_unref (origin);
   return ret;
 }